<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      console.log(1);
      const p = new Promise((resolve, reject) => {
        // 函数是同步调用的
        // resolve(111); // 将promise对象状态改成成功状态
        reject(222); // 将promise对象状态改成失败状态
        // throw new Error("出错了"); // 出错，将promise对象状态改成失败状态
        // console.log(a);
        // 状态只能修改一次，后面再也不会发送变化
        // reject();
        // reject();
      });
      console.log(3);
      // 初始化promise对象状态是pending状态
      console.log(p);

      /*
        then / catch 方法是同步调用
        内部的回调函数是异步执行的

        promise可以链式调用，方法返回值还是一个promise
      */
      // p.then((value) => {
      //   console.log("then");
      // }).catch((reason) => {
      //   console.log("catch", reason);
      // });

      /*
        如何判断then/catch方法返回的promise对象的状态
          默认是成功状态
          报错是失败状态
          如果返回promise, 看返回promise的状态
      */
      p.then((value) => {
        console.log(111);
      })
        .catch((reason) => {
          console.log(222);
          console.log(a);
        })
        .then((value) => {
          console.log(333);
        })
        .catch((reason) => {
          console.log(444);
          return new Promise((resolve, reject) => {
            reject();
          });
        })
        .then((value) => {
          console.log(555);
        })
        .catch((reason) => {
          console.log(666);
        });

      const p1 = Promise.resolve(111);
      const p2 = Promise.reject(222);

      const pAll = Promise.all([p1, p2]);
      console.log(pAll);

      const pAllS = Promise.allSettled([p1, p2]);
      console.log(pAllS);
      /*
         [ {status: 'fulfilled', value: 111},
          {status: 'rejected', reason: 222} ]
      */
    </script>
  </body>
</html>
